donnees = [ {"jour": "2025-02-04", "heure": "00:00", "chaude": 2, "froide": 3}, {"jour": "2025-02-04", "heure": "01:00", "chaude": 1, "froide": 2}, {"jour": "2025-02-04", "heure": "02:00", "chaude": 0, "froide": 0}, {"jour": "2025-02-04", "heure": "03:00", "chaude": 0, "froide": 0}, {"jour": "2025-02-04", "heure": "04:00", "chaude": 0, "froide": 1}, {"jour": "2025-02-04", "heure": "05:00", "chaude": 0, "froide": 0}, {"jour": "2025-02-04", "heure": "06:00", "chaude": 4, "froide": 6}, {"jour": "2025-02-04", "heure": "07:00", "chaude": 6, "froide": 8}, {"jour": "2025-02-05", "heure": "00:00", "chaude": 0, "froide": 0}, {"jour": "2025-02-05", "heure": "01:00", "chaude": 1, "froide": 1}, {"jour": "2025-02-05", "heure": "02:00", "chaude": 1, "froide": 1}, {"jour": "2025-02-05", "heure": "03:00", "chaude": 1, "froide": 1}, {"jour": "2025-02-05", "heure": "04:00", "chaude": 0, "froide": 0}, {"jour": "2025-02-05", "heure": "05:00", "chaude": 0, "froide": 0}, ] # ----------------------------- # Fonctions à compléter # ----------------------------- def total_conso(donnees, jour): total = 0 trouve = False for mesure in donnees: if mesure["jour"] == jour: total += mesure["chaude"] + mesure["froide"] trouve = True if trouve: return total return None print(total_conso(donnees, "2025-02-04")) print(total_conso(donnees, "2025-12-25")) def fuite_possible(donnees, jour): consecutives = 0 for mesure in donnees: if mesure["jour"] == jour and "00:00" <= mesure["heure"] <= "05:00": if mesure["chaude"] + mesure["froide"] > 0: consecutives += 1 if consecutives >= 3: return True else: consecutives = 0 return False # ----------------------------- # Fonction fournie (erronée) # ----------------------------- def lissage_conso(valeurs): """ Calcule une moyenne glissante sur les valeurs. Pour chaque valeur, on calcule la moyenne avec ses voisins. """ lisse = [] for i in range(len(valeurs)): if len(valeurs) == 0: return [] if len(valeurs) == 1: return [valeurs[0]] if i == 0: m = (valeurs[i] + valeurs[i+1]) / 2 elif i == len(valeurs)-1: m = (valeurs[i-1] + valeurs[i]) / 2 else: m = (valeurs[i-1] + valeurs[i] + valeurs[i+1]) / 3 lisse.append(m) return lisse # Question 3 : l’erreur vient du fait que, pour les valeurs intermédiaires, la fonction additionne bien 3 valeurs mais divise par 2 au lieu de diviser par 3 # Question 4 : le cas limite oublié est la liste vide. Avec une liste vide, la fonction actuelle ne plante pas dans la boucle, mais il faut prévoir explicitement ce cas. On peut aussi remarquer qu’une liste d’un seul élément poserait problème avec valeurs[i+1] # ----------------------------- # Espace pour les tests # ----------------------------- def test_lissage(): assert lissage_conso([10, 20, 30, 40, 50]) == [15.0, 20.0, 30.0, 40.0, 45.0] assert lissage_conso([3, 6, 9]) == [4.5, 6.0, 7.5] assert lissage_conso([1, 2, 3, 4]) == [1.5, 2.0, 3.0, 3.5] assert lissage_conso([8, 10]) == [9.0, 9.0] assert lissage_conso([7]) == [7] assert lissage_conso([]) == []